package com.itheima.reggie.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 员工类
 *   包含员工登录信息
 *   基本信息
 *
 *     ======序列化=====
 *       就是 把JVM虚拟机中的对象--变成字节
 *         给外界  Serializable 证 (进京证)
 *            写到硬盘上 持久化保存
 *            写到内存上 redis上
 *     ========json和对象转换=======
 *            jackson fastjson
 *      json字符串 怎么变成对象的呢
 *       底层 反射
 *          字节码文件对象
 *           调用 set方法完成 对象赋值.
 *      对象 --json字符串
 *         反射
 *           调用 get方法  或得到的数据再拼接 成字符串
 *      json和咱对象做转换 一定得有什么方法
 *         set get方法
 *         否则出现406.....
 *     ============泛型============
 *     泛型可以定义在 类上 接口上  方法上
 *     什么时候确定泛型
 *        泛型定义在类上
 *            创建对象确定泛型
 *        泛型定义方法上
 *            调用方法的时候确定泛型
 *        泛型定义在接口上
 *            1: 类实现接口的时候 确定泛型了
 *            2:  类实现的时候不确定, 创建对象在确定
 */
@Data
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    private String username;

    private String name;

    private String password;

    private String phone;

    private String sex;

    private String idNumber;

    private Integer status;
    /*
       您的该字段会进行自动填充    @TableField(fill = )
          什么时候填充呢?
            @TableField(fill = 填充时机 )
             fill =FieldFill.INSERT
                   属性填充  啥时候呢  增加的时候
     */
    @TableField(fill =FieldFill.INSERT )
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    //              属性填充  啥时候呢  增加和更新的时候
    @TableField(fill =FieldFill.INSERT_UPDATE )
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;

}
